import { IDictionary } from "./IUtils";
import { IAnimationControl } from "./IAnimation";

/**
 * 技能基类
 */
export interface ISkillBase {
  /**释放技能*/
  release();
  /**播放技能 */
  play();
  /**技能更新 */
  update();
  /**停止技能 */
  stop();
}
/**技能属性 */
export interface ISkillProperty {
  /**施放技能特效  */
  getCastEffect(): IAnimationControl;
  /**技能击中特效*/
  getHitEffect(): IAnimationControl;
}
/**
 * 技能管理器
 */
export interface ISkillManager {
  /**技能拥有者 */
  owner: any;
  /**
   * 技能列表
   */
  skillList: IDictionary<number, ISkillBase>;
  /**
   * CD管理器
   */
  cdManager: ICoolDownManager;
  /**添加CD */
  addCd(skillId: number): void;
  /**冷却状态 */
  isCoolDown(skillId: number): Boolean;
  /**添加技能 */
  addSkill(skill: ISkillBase): void;
  /**移除技能 */
  remove(skillId: number): void;
  /**获取技能 */
  getSkill(skillId: number): ISkillBase;
}
/**
 * 技能冷却时间
 */
export interface ICoolDown {
  /**技能key */
  key: number;
  /**开始时间 */
  BeginTime: number;
  /**结束时间  */
  EndTime: number;
  /**重置冷却时间 */
  reset(duration: number): void;
}
/**
 * 技能冷却时间管理器
 */
export interface ICoolDownManager {
  /**冷却集合 */
  coolDowns: IDictionary<number, ICoolDown>;
  /**添加冷却时间 */
  addCoolDown(key: number, duration: number): void;
  /**移除冷却时间 */
  removeCoolDown(key: number): void;
  /**是否冷却中 */
  isCoolDown(key: number): boolean;
}
